//===============================================================================
// Copyright (c) 2022-2024  Advanced Micro Devices, Inc. All rights reserved.
//===============================================================================
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files(the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
//
//  File Name:   brlg_sdk_wrapper.h
//
//////////////////////////////////////////////////////////////////////////////

#ifndef _BRLG_SDK_WRAPPER_H_
#define _BRLG_SDK_WRAPPER_H_

#include "compressonator.h"

namespace BRLG
{

struct EncodeParameters
{
    bool precondition;

    CMP_FORMAT format;
    CMP_DWORD  textureWidth;
    CMP_DWORD  textureHeight;
    CMP_DWORD  numMipmapLevels;

    bool doSwizzle;
    bool doDeltaEncode;
};

// A function used to determine if the given CMP_FORMAT has preconditioning support in the Brotli-G SDK
bool IsPreconditionFormat(CMP_FORMAT format);

uint32_t MaxCompressedSize(uint32_t uncompressedSize);

char* GetLastErrorStr();

bool EncodeDataStream(const CMP_BYTE*  inputData,
                      uint32_t         inputSize,
                      CMP_BYTE*        outputData,
                      uint32_t*        outputSize,
                      uint32_t         pageSize,
                      EncodeParameters params = {});

bool DecodeDataStreamCPU(const CMP_BYTE* inputData, uint32_t inputSize, CMP_BYTE* outputData, uint32_t* outputSize);
bool DecodeDataStreamGPU(const CMP_BYTE* inputData, uint32_t inputSize, CMP_BYTE* outputData, uint32_t* outputSize);

}  // namespace BRLG

#endif